// #ifndef RBTREE_H_
// #define RBTREE_H_

// #include <stdio.h>
// #include <stdlib.h>
// #include <string.h>
// #include "icd.h"

// #define COLOR_RED 1
// #define COLOR_BLACK 2

// typedef struct _rbtree_TYPE_node {
//   unsigned char color;
//   struct _rbtree_TYPE_node *right;
//   struct _rbtree_TYPE_node *left;
//   struct _rbtree_TYPE_node *parent;
//   TYPE data;
// } rbtree_TYPE_node;

// typedef struct _rbtree_TYPE {
//   rbtree_TYPE_node *root;
//   rbtree_TYPE_node *nil;
// } rbtree_TYPE;

// cerr_code rbtree_TYPE_init(rbtree_TYPE* tree);

// rbtree_TYPE* rbtree_TYPE_new();

// cerr_code rbtree_TYPE_dtor(rbtree_TYPE* tree);

// void rbtree_TYPE_free(rbtree_TYPE* tree);

// cerr_code rbtre_TYPE_dtor(rbtree_TYPE* tree);
// // 一直走到最左边
// rbtree_TYPE_node *rbtree_TYPE_leftmost(rbtree_TYPE *tree, rbtree_TYPE_node *x);

// // 一直走到最右边
// rbtree_TYPE_node *rbtree_TYPE_rightmost(rbtree_TYPE *tree, rbtree_TYPE_node *x);
// // 严格刚好比自己更大的那个元素
// rbtree_TYPE_node *rbtree_TYPE_successor(rbtree_TYPE *tree, rbtree_TYPE_node *x);

// rbtree_TYPE_node *rbtree_TYPE_find(rbtree_TYPE *tree, TYPE data);

// void rbtree_TYPE_insert_node(rbtree_TYPE *tree, rbtree_TYPE_node *z);

// void rbtree_TYPE_insert(rbtree_TYPE *tree, TYPE data);

// void rbtree_TYPE_remove_node_fixup(rbtree_TYPE *tree, rbtree_TYPE_node *x);

// rbtree_TYPE_node *rbtree_TYPE_remove_node(rbtree_TYPE *tree, rbtree_TYPE_node *z);

// void rbtree_TYPE_remove(rbtree_TYPE *tree, TYPE data);
// #endif